今天這篇文章要分享我自己在抓取某個路徑下所有檔案時,很喜歡用的一個套件,覺得它使用彈性滿高,有滿好理解的!自從知道有這個套件後,之後抓檔名都沒有換過其他方式了 XD
根據官方文檔,有這三種用法:glob.glob(pathname, *, recursive=False)
glob.iglob(pathname, *, recursive=False)
glob.escape(pathname)
這邊只先介紹 glob.glob,其他應用有需要時可以再延伸研究
import os
import glob
# Create directory
os.mkdir(os.path.join("Folder_1")
os.mkdir(os.path.join("Folder_1", "File_1.txt"))
os.mkdir(os.path.join("Folder_1", "File_2.csv"))
os.mkdir(os.path.join("Folder_1", "File_3.txt"))
# 備註:這邊其實都是建立資料夾,只是為了示範用,所以加上檔名,實際上並非檔案
先來解釋一下,參數 pathname
用到的一些符號:
*
的意思就是匹配所有的內容.txt
, .csv
[1-2]
就是匹配 1 到 2 之間的整數數值延伸學習:如何使用正規表達式
# Find pathnames under the specified directory
# 取得 Folder_1 這層裡面,所有東西的路徑
print(glob.glob(os.path.join("Folder_1", "*")))
# 取得 Folder_1 這層裡面,結尾是 .txt 的路徑
print(glob.glob(os.path.join("Folder_1", "*.txt")))
# 取得 Folder_1 這層裡面,結尾是 .csv 的路徑
print(glob.glob(os.path.join("Folder_1", "*.csv")))
# 取得 Folder_1 這層裡面,檔名中有 1 或 2 的東西的路徑
print(glob.glob(os.path.join("Folder_1", "*[1-2]*")))
# 備註
# 這邊利用 os.path.join 來連接指定字串形成路徑,因為不同系統下的分隔符號可能不同
# 可以用 os.sep 來查看,在設定路徑時,也直接用符合的分隔符號來串連
輸出:
['Folder_1/File_1.txt', 'Folder_1/File_3.txt', 'Folder_1/File_2.csv']
['Folder_1/File_1.txt', 'Folder_1/File_3.txt']
['Folder_1/File_2.csv']
['Folder_1/File_1.txt', 'Folder_1/File_2.csv']
透過 glob.glob
結合正規表達式
,就可以輕鬆的特定一些篩選條件,抓出想要的檔案路徑